The CUDA Python Developer's Toolbox

Katrina Riehl, PhD
Principal Technical Product Manager - CUDA Python
GTC 2025 - March 18, 2025

目录


1. CUDA与Python:光速生产力的故事

Page 2
Page 2

本次演讲是关于CUDA和Python系列讲座的一部分。该系列共包含四个步骤,旨在引导开发者逐步深入了解并掌握在Python中使用CUDA进行加速计算的技术:


2. CUDA加速Python:贯穿整个技术栈的一流Python支持

"一流"(First-Class)意味着CUDA现在将Python融入到平台的每一个API和每一个特性中。

Page 4
Page 4

CUDA Python生态系统提供了一个分层的技术栈,涵盖了从高层框架到底层工具的全面支持。这些层次之间具有互操作性,允许开发者混合和匹配不同层次的库来满足其需求。

技术栈各层级及其对应的Python库示例:

CUDA Python 框架

PyTorch 是一个开源的机器学习(ML)框架。以下代码展示了如何使用PyTorch实现SAXPY(y = a*x + y)操作。

import torch
def saxpy(a:float, x: torch.Tensor, y: torch.Tensor) -> torch.Tensor:
    """
    Perform the SAXPY operation: y = a * x + y
    """
    
    return a * x + y

# Example usage:
a = 2.0
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])

result = saxpy(a, x, y)
print(result) # Output: tensor([6., 9., 12.])

CUDA Python SDKs

CuDF 是一个类似于GPU上的Pandas的库,它是RAPIDS生态系统的一部分。

Page 6
Page 6

以下代码展示了如何使用cuDF创建一个DataFrame并进行操作。

df = cudf.DataFrame(
    {'angles': [0, 3, 4], 'degrees': [360, 180, 360]},
    index=['circle', 'triangle', 'rectangle']
)

>>> df.multiply(1)

#          angles degrees
# circle        0     360
# triangle      3     180
# rectangle     4     360

CUDA Python 领域特定库

CuPy 是一个类似于GPU上的NumPy和SciPy的库。

Page 7
Page 7

以下代码展示了如何使用CuPy在GPU上创建数组、执行计算,并将结果移回主机(CPU)。

x_gpu = cp.array([1, 2, 3]) # create an array in the current device
y_gpu = cp.array([1, 2, 3])

x_gpu = x_gpu + y_gpu

x_cpu = cp.asnumpy(x_gpu) # move the array to the host

CUDA生态系统的不同层面

CUDA Python库在Python开发者体验中的定位可以在生产力(productivity)与速度(speed)的权衡曲线上体现。通常,更高层次的抽象(如框架)提供更高的生产力但可能对性能的控制较少,而更低层次的库则提供更高的速度和控制力,但开发复杂度更高。CUDA Python旨在提升整个曲线,让开发者在获得高性能的同时也能保持高生产力。

Page 9
Page 9

3. 深度学习用例:深入研究激活函数

Page 10
Page 10

使用CuPy实现

我们将首先关注技术栈中的CuPy库。

Page 11
Page 11

CuPy是一个与NumPy/SciPy兼容的数组库,用于通过Python进行GPU加速计算。

以下示例展示了如何使用CuPy实现一个带有偏置的ReLU函数:d = ReLU(a @ b + bias)

Page 12
Page 12

CuPy 亮点

Page 13
Page 13

使用 nvmath-python 实现

接下来,我们将关注技术栈中的 nvmath-python 库。

Page 14
Page 14

CUDA-X 数学库 (C++层面)

nvmath-python 是对底层 CUDA-X 数学库的封装。这些由NVIDIA提供的GPU加速数学库是计算密集型应用的基础,应用领域涵盖分子动力学、计算流体动力学、计算化学、医学成像以及地震勘探等。

Page 15
Page 15

主要的CUDA数学库包括:

nvmath-python: RELU 示例

nvmath-python 是一个用于在 Python 中利用 NVIDIA GPU 加速数学计算的库。以下通过一个 d = RELU(a @ b + bias) 的例子,展示其核心特性。

nvmath-python 及其特性展示,包含代码、日志和性能图表 (Page 16)
nvmath-python 及其特性展示,包含代码、日志和性能图表 (Page 16)

核心特性:

性能对比:

图表显示了 d = RELU(a @ b + bias) 在不同实现下的性能(以 TFLOPS 计)。
* 使用三个独立的内核(3 kernels)性能约为 76.5%。
* 使用一个默认启发式选择的融合内核(1 fused kernel, default heuristic)性能约为 84.2%。
* 使用自动调优(Autotuned)找到的最佳融合内核性能最高,达到 89.9%。

nvmath-python 亮点

nvmath-python 亮点及二维码 (Page 17)
nvmath-python 亮点及二维码 (Page 17)

CUDA 加速的 Python:贯穿整个技术栈的一流 Python 支持

“一流”意味着 CUDA 现在将 Python 纳入其平台的每个 API 和每个功能中。下图展示了 CUDA Python 生态系统在不同层级的分布,其中 numba-cuda 位于内核编写(Kernel Authoring)层。

CUDA Python 技术栈概览 (Page 18)
CUDA Python 技术栈概览 (Page 18)

Numba CUDA

Numba 是一个即时(Just-In-Time, JIT)编译器,用于加速 Python 中的数值函数在 CPU 和 GPU 上的运行。它允许开发者直接在 Python 中编写 CUDA 内核。

Numba CUDA 代码示例 (Page 19)
Numba CUDA 代码示例 (Page 19)

代码示例

Numba CUDA: GPU 上的 ReLU 内核

以下是使用 Numba CUDA 实现 ReLU 激活函数的内核示例。

Numba CUDA 实现的 ReLU 内核代码 (Page 20)
Numba CUDA 实现的 ReLU 内核代码 (Page 20)

Numba 概览

Numba 概览及二维码 (Page 21)
Numba 概览及二维码 (Page 21)

CUDA 加速的 Python 技术栈及其互操作性

CUDA Python 技术栈的各个层级之间可以混合搭配,具有良好的互操作性。例如,开发者可以在 PyTorch(框架层)中使用 CuPy(领域特定库),调用 nvmath-python(加速库),甚至可以在其中嵌入使用 numba-cuda(内核编写)编写的自定义内核。

CUDA Python 技术栈的互操作性 (Page 22)
CUDA Python 技术栈的互操作性 (Page 22)

4. CUDA开发者工具

为了在 GPU 上实现光速般的性能,可以使用 NVIDIA 提供的开发者工具。

CUDA 开发者工具及性能优化流程 (Page 23)
CUDA 开发者工具及性能优化流程 (Page 23)

性能优化考虑因素:

开发者工具:

CUDA Python 开发者工具特性

这些工具超越了传统的 pdbprint 调试方式,为 Python 开发者提供了强大的功能。

开发者工具生态系统

NVIDIA 提供了一个完整的工具生态系统,以帮助开发者在 GPU 上实现极致性能。

开发者工具生态系统概览 (Page 25)
开发者工具生态系统概览 (Page 25)

5. 社区资源与相关会议

加速计算中心 (Accelerated Computing Hub)

NVIDIA 在 GitHub 上提供了一个加速计算中心,汇集了与通用和加速 GPU 编程相关的教育资源。

访问地址: https://github.com/NVIDIA/accelerated-computing-hub

NVIDIA 加速计算中心 GitHub 页面 (Page 26)
NVIDIA 加速计算中心 GitHub 页面 (Page 26)

CUDA 开发者会议

以下是与 CUDA 相关的更多开发者会议列表,涵盖了通用 CUDA、CUDA Python、CUDA C++、开发者工具、多 GPU 编程和性能优化等多个主题。

CUDA 开发者会议列表 (Page 28)
CUDA 开发者会议列表 (Page 28)

更多信息请访问:nvidia.com/gtc/sessions/cuda-developer